home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 1997 April to September / Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso / products / Hyperion / src / struct.h < prev    next >
C/C++ Source or Header  |  1997-02-26  |  4KB  |  126 lines

  1. /* @(#)struct.h    1.17 2/24/94 */
  2.  
  3. /*
  4.  * Structure for a single track.  This is pretty much self-explanatory --
  5.  * one of these exists for each track on the current CD.
  6.  */
  7. struct trackinfo {
  8.     char    *songname;    /* Name of song, dynamically allocated */
  9.     char    *otherdb;    /* Unrecognized info for this track */
  10.     char    *otherrc;
  11.     int    length;        /* Length of track in seconds or Kbytes */
  12.     int    start;        /* Starting position (f+s*75+m*60*75) */
  13.     int    volume;        /* Per-track volume (1-32, 0 to disable) */
  14.     int    track;        /* Physical track number */
  15.     int    section;    /* Section number (0 if track not split) */
  16.     int    contd;        /* Flag: continuation of previous track */
  17.     int    avoid;        /* Flag: don't play this track. */
  18.     int    data;        /* Flag: data track */
  19. };
  20.  
  21. /*
  22.  * Structure for internal playlist management.  The internal playlist is
  23.  * simply the list of track ranges that are being played currently.  This
  24.  * is built whenever the CD starts playing; it's used in normal and shuffle
  25.  * modes as well as playlist mode.
  26.  *
  27.  * The "starttime" element represents how much time has elapsed by the time
  28.  * we get to this entry.  For instance, if the list begins with a 5-minute
  29.  * track and a 3-minute track, the third entry would have a starttime of 8
  30.  * minutes.  This is used so that the elapsed play time can be displayed
  31.  * even in shuffle or playlist modes.
  32.  *
  33.  * The last member of the list has a start track of 0, and its starttime is
  34.  * the total playing time of the playlist (which will usually be overestimated,
  35.  * since we don't play leadouts in some cases.)
  36.  */
  37. struct play {
  38.     int    start;        /* Start track, or 0 if end of list */
  39.     int    end;        /* last track plus 1 */
  40.     int    starttime;    /* Number of seconds elapsed previously */
  41. };
  42.  
  43. /*
  44.  * Structure for playlists (as seen by the user.)  This is simply a name
  45.  * followed by a zero-terminated list of track numbers to play.  The list
  46.  * is terminated by a NULL name.
  47.  */
  48. struct playlist {
  49.     char    *name;        /* Name of this playlist */
  50.     int    *list;        /* List of tracks */
  51. };
  52.  
  53. struct cdinfo_wm {
  54.     char    artist[84];    /* Artist's name */
  55.     char    cdname[84];    /* Disc's name */
  56.     int    ntracks;    /* Number of tracks on the disc */
  57.     int    length;        /* Total running time in seconds */
  58.     int    autoplay;    /* Start playing CD immediately */
  59.     int    playmode;    /* How to play the CD */
  60.     int    volume;        /* Default volume (1-32, 0 for none) */
  61.     struct trackinfo *trk;    /* struct trackinfo[ntracks] */
  62.     struct playlist *lists;    /* User-specified playlists */
  63.     char    *whichdb;    /* Which database is this entry from? */
  64.     char    *otherdb;    /* Unrecognized lines from this entry */
  65.     char    *otherrc;
  66.     char    *user;        /* Name of originating user */
  67.     struct cdinfo *next;    /* For browsers, etc. */
  68. };
  69.  
  70. /* The global variable "cd" points to the struct for the CD that's playing. */
  71. extern struct cdinfo_wm *cd;
  72.  
  73. struct playlist *new_list();
  74.  
  75. enum cd_modes    {
  76.     UNKNOWN = -1,
  77.     BACK = 0, TRACK_DONE = 0,
  78.     PLAYING = 1,
  79.     FORWARD = 2,
  80.     PAUSED=3,
  81.     STOPPED=4,
  82.     EJECTED=5
  83. };
  84.  
  85. /*
  86.  * Drive descriptor structure.  Used for access to low-level routines.
  87.  */
  88. struct wm_drive {
  89.     int    fd;        /* File descriptor, if used by platform */
  90.     char    vendor[16];    /* Vendor name */
  91.     char    model[24];    /* Drive model */
  92.     void    *aux;        /* Pointer to optional platform-specific info */
  93.     void    *daux;        /* Pointer to optional drive-specific info */
  94.  
  95.     int    (*init)();
  96.     int    (*get_trackcount)();
  97.     int    (*get_cdlen)();
  98.     int    (*get_trackinfo)();
  99.     int    (*get_drive_status)();
  100.     int    (*get_volume)();
  101.     int    (*set_volume)();
  102.     int    (*pause)();
  103.     int    (*resume)();
  104.     int    (*stop)();
  105.     int    (*play)();
  106.     int    (*eject)();
  107. };
  108.  
  109. /*
  110.  * Each platform has to define generic functions, so may as well declare
  111.  * them all here to save space.
  112.  */
  113. int     gen_init(),
  114.     gen_get_trackcount(),
  115.     gen_get_cdlen(),
  116.     gen_get_trackinfo(),
  117.     gen_get_drive_status(),
  118.     gen_get_volume(),
  119.     gen_set_volume(),
  120.     gen_pause(),
  121.     gen_resume(),
  122.     gen_stop(),
  123.     gen_play(),
  124.     gen_eject();
  125. struct wm_drive *find_drive_struct();
  126.